Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework Storage Disassembly system to be based on Custom Recipes / Impl #6934 #8207

Open
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

Kanzaji
Copy link

@Kanzaji Kanzaji commented Oct 7, 2024

Resolves: #6934

This PR Implements a Quick-Switch feature from a suggestion #6934, and reworks the disassembly of storage components to be data-driven!

Disassembly system rework

The system uses two new recipe types - crafting_unit_transform and storage_cell_disassembly, schemas below, that handle the Upgrade (Crafting Units only) and disassembly results.

Schema for crafting_unit_transform recipes:

{
  "type": "ae2:crafting_unit_transform",
  "block": "ae2:16k_crafting_storage", // Has to be instance of AbstractCraftingUnitBlock<?>.
  "disassembly_items": [
    {
      "count": 1,
      "id": "ae2:cell_component_16k"
    }
  ],
  "upgrade_items": [
    "ae2:cell_component_16k" // List of acceptable items to upgrade to the specified block
  ],
  "disassembly_loot_table": "ae2:some/loot_table" // disassembly_items takes priority!
}

Schema for storage_cell_disassembly recipes:

{
  "type": "ae2:storage_cell_disassembly",
  "cell": "ae2:fluid_storage_cell_256k",
  "cell_disassembly_items": [
    // return itemstacks for cell
  ]
}

The disassembly process returns items based on the recipes. If the recipe is missing - disassembly is disabled and default action is executed.

Quick-Switch Crafting Unit types.

This feature allows for hot-swapping a type of Crafting Unit, by right-clicking the block with a correct upgrade item, or disassembling the block with Shift + Right Click.

The upgrade / disassembly will be aborted (and warning will be issued to the player) if the cluster of the Crafting Unit to be upgraded/disassembled is currently working on a crafting job, to avoid accidentally aborting a crafting job, and dropping all the items on the floor!

obraz

Bug Fixes

  • Fixed a crash when Portable Cell recipe was missing.
  • Fixed Storage Cell Upgrade in Crafting Grid voiding the old component.

Added a check to see if provided block is an instance ofAbstractCraftingUnitBlock, this will stop the one-way upgrade paths from a Crafting Unit to any other block!

Added a check if Loot Table exists. It's only for the information of a modpack developer.
… small changes

Portable Cells now use custom recipe, instead of getting the items from the recipe. While this seems like a downgrade, this eliminates the issues related to Tag Ingredients.

Storage Cells now use custom recipe, instead of being hard-coded to return housing + component!

Renamed CraftingUnitUpgradeRecipe to CraftingUnitTransformRecipe + Serializer
Changed Type of CraftingUnitUpgrade recipe to "crafting_unit_transform"
Also remove @ Deprecated fields from affected files.
Also add support for Crafting Accelerators and Crafting Monitors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Change the Crafting Storage level by right-clicking the block itself with correct Storage component!
1 participant